package com.tmjavabasics;

import com.tmjavabasics.basics.Basics;
import com.tmjavabasics.basics.Parent;
import com.tmjavabasics.mythreads.SharedData;
import com.tmjavabasics.mythreads.ThreadOne;

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.println("Hello World");

		Basics basics = new Basics();
		basics.doSomething();

		Parent p1 = new Parent();
		p1.change(10);
		p1.print();
		
		//verwendung einer anonymen klasse
		//Anonyme Klassen sind ein Spezialfall der lokalen Klassen. 
		//Sie haben keinen Namen und werden stets im Argument einer new-Anweisung definiert. 
		//die anonyme klasse "leiht" sich den Namen der Vaterklasse
		
		Parent.toMaximal(new Parent() {
			@Override
			public void change(int value) {
				this.counter = value * -1;
			}
		});
		
		SharedData sharing=new SharedData();
		
		ThreadOne threadOne = new ThreadOne("One");
		ThreadOne threadTwo = new ThreadOne("Two");
		
		threadOne.setSharing(sharing);
		threadTwo.setSharing(sharing);
		
		threadOne.start();
		threadTwo.start();
	}

}
